package com.buddy.learn.algorithm.simple;

/**
 * 不使用+加号实现正整数的求和相加
 * @author Buddy
 * @date 2021/4/20
 */
public class SumWithoutPlus {


    /**
     * 以一个二进制加法为例，1011+0010，
     * 如果不计算进位的加，那么结果应该是1011+0010=1011^0010 = 1001（^是异或），
     * 而进位信息应该是(1011&0010)<<1 =0100
     * 计算不带有进位的结果使用^(相同为0 不同为 1)，求取进位信息使用& 。
     *
     *          13 + 2
     *          1011
     *          0010
     *     a^b  1001
     *     a&b  0010
     *  a&b<<1  0100
     *
     *          1001
     *          0100
     *     a^b  1101
     *     a&b  0000
     *  a&b<<1  0000
     * @param args
     */
    public static void main(String[] args) {
        int a = 13,b=2;
        System.out.println("a+b="+sum1(a,b));
    }

    private static int sum1(int a, int b) {
        if (b == 0){
            return a;
        }else{
            return sum1(a^b,(a&b) << 1);
        }
    }
}
